/**
 * 
 */
package hunau.edu.cxb20.practice4_9digui;

import org.junit.Test;

/**
 * @author Jiang Zhiyan
 *
 * 2021年4月9日 上午8:34:46
 */

public class Digui {
	@Test
  public void fTest() {
	  long f1=f(5); //递归 f(n)=f(n-1)+f(n-2)的值
	  long f2=forTest(5); //循环 f(n)=f(n-1)+f(n-2)的值
	  long f3=fn(5); //递归求阶乘
	  int f4= forJc(5); // 循环求阶乘
	  System.out.println(f1); 
	  System.out.println(f2);
	  System.out.println("递归求阶乘:"+f3); 
	  System.out.println("循环求阶乘:"+f4);
  }
	//递归f(n)=f(n-1)+f(n-2)
	public long f(long n) {
		  if(n==1||n==2) {
			  return 1;
		  }
		  return f(n-1)+f(n-2);
	}

	//循环f(n)=f(n-1)+f(n-2)
	public long forTest(long n) {
		long f1=1;
		long f2=1;
	  for(int i=3;i<=n;i++) {
		  f2=f1+f2;
		  f1=f2-f1;
	  }
	  return f2;
	}

//递归求阶乘
public static long fn(long n) {
	if(n==1) {
		return 1;
	}
	return fn(n-1)*n;
}
//循环计算阶乘
public static int forJc(int n) {
	int jc = 1;
	for(int i=1;i<=n;i++) {
		jc=jc*i;
	}
	System.out.println(jc);
	return jc;
}
}